<template>
  <div class="p-2 cgformErpList">
    <div class="content">
      <!--引用表格-->
      <BasicTable @register="registerTable" :rowSelection="rowSelection">
        <!--插槽:table标题-->
        <template #tableTitle>

          <a-button type="primary" @click="printWaybills" preIcon="ant-design:plus-outlined">
            打印电子面单
          </a-button>
          <a-button type="primary" @click="handleSend" preIcon="ant-design:plus-outlined"> 发货
          </a-button>
          <a-dropdown v-if="selectedRowKeys.length > 0">
            <template #overlay>
              <!--              <a-menu>-->
              <!--                <a-menu-item key="1" @click="batchHandleDelete">-->
              <!--                  <Icon icon="ant-design:delete-outlined"></Icon>-->
              <!--                  删除-->
              <!--                </a-menu-item>-->
              <!--              </a-menu>-->
            </template>
            <!--            <a-button  v-auth="'wave:wms_wave_master:deleteBatch'">批量操作-->
            <!--              <Icon icon="mdi:chevron-down"></Icon>-->
            <!--            </a-button>-->
          </a-dropdown>
          <!-- 高级查询 -->
          <!--          <super-query :config="superQueryConfig" @search="handleSuperQuery" />-->
        </template>
        <!--操作栏-->
        <template #action="{ record }">
          <TableAction :actions="getTableAction(record)"
                       :dropDownActions="getDropDownAction(record)"/>
        </template>
        <!--字段回显插槽-->
        <template v-slot:bodyCell="{ column, record, index, text }">
        </template>
      </BasicTable>
      <!--子表表格tab-->
      <!--      <a-tabs defaultActiveKey="1" style="margin: 10px">-->
      <!--        <a-tab-pane tab="出库单" key="1" >-->
      <!--          <WmsOutOrdersList />-->
      <!--        </a-tab-pane>-->
      <!--      </a-tabs>-->
    </div>
    <!-- 表单区域 -->
    <WmsWaveMasterModal @register="registerModal" @success="handleSuccess"></WmsWaveMasterModal>
    <!--创建波次选择波次策略表单-->
    <WmsWaveSfPrintModal @register="registerSfModal" @success="handleSuccess"></WmsWaveSfPrintModal>
  </div>
</template>

<script lang="ts" name="wave-wmsWaveMaster" setup>

import {ref, reactive, computed, unref, provide} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useListPage} from '/@/hooks/system/useListPage'
import {useModal} from '/@/components/Modal';
import WmsWaveMasterModal from './components/WmsWaveMasterModal.vue'
import WmsWaveSfPrintModal from './components/WmsWaveSfPrintModal.vue'
import {useUserStore} from '/@/store/modules/user';
import WmsOutOrdersList from './WmsOutOrdersList.vue'
import {columns, searchFormSchema, superQuerySchema} from './WmsWaveMaster.data';
import {getLodop} from '/@/assets/LodopFuncs' //导入模块
import {
  list,
  deleteOne,
  batchDelete,
  getImportUrl,
  getExportUrl,
  createPickTask, createShipment, listByCreate, listByPicking, listByPacked, printWaybill, send
} from './WmsWaveMaster.api';
import {downloadFile} from '/@/utils/common/renderUtils';
import {useMessage} from "@/hooks/web/useMessage";
import '/@/assets/SCPPrint.js'

const queryParam = reactive<any>({});
//注册model
const [registerModal, {openModal}] = useModal();
const [registerSfModal, {openModal: openSfModal}] = useModal();
const {createMessage} = useMessage();
//注册table数据
const {prefixCls, tableContext, onExportXls, onImportXls} = useListPage({
  tableProps: {
    title: '波次主表',
    api: listByPacked,
    columns,
    canResize: false,
    clickToRowSelect: true,
    rowSelection: {type: 'checkbox'},
    formConfig: {
      schemas: [],
      fieldMapToNumber: [],
      fieldMapToTime: [],
    },
    actionColumn: {
      width: 120,
      fixed: 'right'
    },
    beforeFetch: (params) => {
      return Object.assign(params, queryParam);
    },
    pagination: {
      current: 1,
      pageSize: 5,
      pageSizeOptions: ['5', '10', '20'],
    }
  },
  exportConfig: {
    name: "波次主表",
    url: getExportUrl,
    params: queryParam,
  },
  importConfig: {
    url: getImportUrl,
    success: handleSuccess
  },
})
const userStore = useUserStore();
const [registerTable, {reload}, {rowSelection, selectedRowKeys}] = tableContext

const mainId = computed(() => (unref(selectedRowKeys).length > 0 ? unref(selectedRowKeys)[0] : ''));
//下发 mainId,子组件接收
provide('mainId', mainId);

// 高级查询配置
const superQueryConfig = reactive(superQuerySchema);
//打印机
const pcData = [];

/**
 * 高级查询事件
 */
function handleSuperQuery(params) {
  Object.keys(params).map((k) => {
    queryParam[k] = params[k];
  });
  reload();
}

/**
 * 打印面单
 */
function printWaybills() {
  if (selectedRowKeys.value.length === 0) {
    createMessage.warn('请选择波次')
    return;
  }
  //只允许单选
  if (selectedRowKeys.value.length > 1) {
    createMessage.warn('一次只能选择一个波次')
    return;
  }
  //请求后台获取token及运单号
  printWaybill({waveId: selectedRowKeys.value[0]}, function (res) {
    console.log(res.waybillNos)
    console.log(res.token)
    openSfModal(true, {
      waybillNos: res.waybillNos,
      token: res.token,
      isUpdate: false,
      showFooter: true,
    });
  })

}

/**
 * 发货
 */
async function handleSend() {
  if (selectedRowKeys.value.length === 0) {
    createMessage.warn('请选择波次')
    return;
  }
  //只允许单选
  if (selectedRowKeys.value.length > 1) {
    createMessage.warn('只允许单选')
    return;
  }
  //发货
  await send({waveId: selectedRowKeys.value[0]}, function(res){
    createMessage.success('操作成功');
  })
}

/**
 * 创建拣货任务
 */
async function handleCreatePickTask() {
  //如果没有选择数据则提示
  if (selectedRowKeys.value.length === 0) {
    createMessage.warn('请选择波次')
    return;
  }
  await createPickTask({ids: selectedRowKeys.value}, handleSuccess)
}

/**
 * 创建包裹
 */
async function handleCreateShipment() {
  //如果没有选择数据则提示
  if (selectedRowKeys.value.length === 0) {
    createMessage.warn('请选择波次')
    return;
  }
  await createShipment({ids: selectedRowKeys.value}, handleSuccess)
}

/**
 * 编辑事件
 */
function handleEdit(record: Recordable) {
  openModal(true, {
    record,
    isUpdate: true,
    showFooter: true,
  });
}

/**
 * 详情
 */
function handleDetail(record: Recordable) {
  openModal(true, {
    record,
    isUpdate: true,
    showFooter: false,
  });
}

/**
 * 删除事件
 */
async function handleDelete(record) {
  await deleteOne({id: record.id}, handleSuccess);
}

/**
 * 批量删除事件
 */
async function batchHandleDelete() {
  await batchDelete({ids: selectedRowKeys.value}, handleSuccess);
}

/**
 * 成功回调
 */
function handleSuccess() {
  (selectedRowKeys.value = []) && reload();
}

/**
 * 操作栏
 */
function getTableAction(record) {
  return [
    {
      label: '详情',
      onClick: handleDetail.bind(null, record),
    }
    // {
    //   label: '编辑',
    //   onClick: handleEdit.bind(null, record),
    //   auth: 'wave:wms_wave_master:edit'
    // }
  ]
}


/**
 * 下拉操作栏
 */
function getDropDownAction(record) {
  return [
    // {
    //   label: '详情',
    //   onClick: handleDetail.bind(null, record),
    // }, {
    //   label: '删除',
    //   popConfirm: {
    //     title: '是否确认删除',
    //     confirm: handleDelete.bind(null, record),
    //     placement: 'topLeft'
    //   },
    //   auth: 'wave:wms_wave_master:delete'
    // }
  ]
}


</script>

<style lang="less" scoped>
html[data-theme='light'] {
  .cgformErpList {
    height: 100%;

    .content {
      background-color: #fff;
      height: 100%;
    }
  }
}

:deep(.ant-picker), :deep(.ant-input-number) {
  width: 100%;
}
</style>
